package java17demo;

// 只允许Bird, Aircraft, UFO实现Flyable接口
sealed interface Flyable permits Bird, Aircraft, UFO {
	
}

/*直接继承或实现一个sealed的类型的类只能声明为final, sealed, or non-sealed*/

// 1. 声明为final。其不能有子类。
final class Bird implements Flyable{
	
}

// 2. 声明为non-sealed。未封闭，其可以有子类
non-sealed class Aircraft implements Flyable{
	
}

class Helicopter extends Aircraft{
	
}

// 3. 声明为sealed。封闭，代表其只能拥有permits声明的子类。
sealed class UFO implements Flyable permits CircleUFO, RectUFO{
	
}

final class CircleUFO extends UFO{
	
}

final class RectUFO extends UFO{
	
}


public class SealedClassDemo {

	public static void main(String[] args) {
		

	}

}
